home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tech Arsenal 1
/
Tech Arsenal (Arsenal Computer).ISO
/
tek-01
/
cqa.zip
/
PRTGRAP.TC
< prev
next >
Wrap
Text File
|
1991-04-01
|
3KB
|
122 lines
QUESTION: How does one go about printing graphics on a dot-matrix
printer?
ANSWER: The following code is an example function which prints a
graphics screen on an Epson compatible printer.
PROTOTYPE: printimage(int left, int top, int right, int bottom);
-----------------------------------------------------------------
/*------------------------- PRTGRAP.C --------------------------*/
#include <graphics.h>
#include <stdio.h>
#include <io.h>
#define ESC '\x1B'
#define LPT1 0
#define LPT2 1
#define prn_putc(x) biosprint(0,(x),LPT1)
/*-------------------------------------------------------------------
bitImage - Sets Epson printer to bit image mode. Nbytes is the
number of bytes to print.
*/
static void bitImage(int Nbytes)
{
register int n1, n2;
n2 = Nbytes >> 8;
n1 = Nbytes - (n2 << 8);
prn_putc(ESC);
prn_putc('*');
prn_putc(4);
prn_putc(n1);
prn_putc(n2);
} /* end of bitImage() */
/*-------------------------------------------------------------------
getScrBits - Get pixels from the screen and convert them to
the printer's pin order.
*/
static unsigned char getScrBits(int x, int y)
{
unsigned char firePins;
firePins = (getpixel(x, y++)==0)? 0: 0x80;
firePins |= (getpixel(x, y++)==0)? 0: 0x40;
firePins |= (getpixel(x, y++)==0)? 0: 0x20;
firePins |= (getpixel(x, y++)==0)? 0: 0x10;
firePins |= (getpixel(x, y++)==0)? 0: 0x08;
firePins |= (getpixel(x, y++)==0)? 0: 0x04;
firePins |= (getpixel(x, y++)==0)? 0: 0x02;
firePins |= (getpixel(x, y )==0)? 0: 0x01;
return firePins;
} /* end of getScrBits() */
/*-------------------------------------------------------------------
printimage - Graphics print function. */
*/
int printimage(int left, int top, int right, int bottom)
{
int x, y, width, height;
width = right-left;
height = bottom-top;
/* Initialize line spacing to 7/72" */
prn_putc(ESC);
prn_putc('1');
for (y=0; y<height; y+=8) {
bitImage(width);
for (x=0; x<width; x++) prn_putc(getScrBits(x,y));
prn_putc('\n');
}
return 0;
} /* end of printimage() */
/****************************************************************
An example program which demonstrates a call to the above
function.
*/
main()
{
int driver, mode, x, y;
driver = DETECT; /* autodetect */
mode = 0;
initgraph(&driver, &mode, "");
x = getmaxx();
y = getmaxy();
/* draw some things */
rectangle(0,0,x,y);
circle(300, 200, 100);
circle(210, 110, 50);
circle(390, 110, 50);
circle(270, 170, 10);
circle(272, 173, 3);
circle(330, 170, 10);
circle(332, 173, 3);
circle(300, 200, 10);
moveto(280, 220);
lineto(290, 230);
lineto(310, 230);
lineto(320, 220);
/* Call the graphics print function. */
printimage(0, 0, x, y); /* Print the entire screen. */
closegraph();
return 0;
}